#pragma once
#include "fs_algo.h"
#include "Data.h"

#include "Config.h"

#define MAX_CLASS_NUM 100

struct MaxentProb
{
	double mProb[MAX_CLASS_NUM];
	MaxentProb() { memset(mProb,0,MAX_CLASS_NUM*sizeof(double)); }
	const double& operator[](int i) const { return mProb[i]; }
	double& operator[](int i) { return mProb[i]; }
};

class CModel
{
public:
	CModel(Config* c):config(c){}
	void loadMaxentModel(const string& path);
	void getMaxentProb(vector<string>& feat,MaxentProb& mprob);
private:
	int get_id(map<string,int>& nmap,const string& val);
private:
	Config* config;
private:
	map<string,int> outcomeMap;//model tag map
	map<string,int> predMap;//model 起始部分 模板 map
	vector<vector<pair<int,int> > > params;//特征模板 <特征序号, id(递增)>
	vector<double> theta;
};
